package pos.server.dac.dao;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import pos.domain.TipoLinkcomposto_da;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import pos.client.dac.dao.TipoLinkcomposto_daDAO;
import pos.domain.Utente;
import pos.server.dac.ConnectionManager;
import pos.server.dac.exceptions.EccezioneCRUD;

/**
 *
 * @author Alessio
 */
public class TipoLinkcomposto_daDAOImpl extends RemoteServiceServlet implements TipoLinkcomposto_daDAO
{
    private final String SELECT_SQL = "SELECT anno, semestre FROM composto_da WHERE corso_utente = ? AND corso_nome = ? AND piano = ?";
    private final String INSERT_SQL = "INSERT INTO composto_da (corso_utente, corso_nome, piano, anno, semestre) VALUES (?,?,?,?,?)";
    private final String DELETE_SQL = "DELETE FROM composto_da WHERE corso_utente = ? AND corso_nome = ? AND piano = ?";
    private final String UPDATE_SQL = "UPDATE composto_da SET anno = ?, semestre = ? WHERE corso_utente = ?, corso_nome = ?, piano = ?";
    
    @Override
    public void inserisciDatisuDb(TipoLinkcomposto_da obj) throws EccezioneCRUD
    {
        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            con = ConnectionManager.getConnection();
            pstmt = con.prepareStatement(INSERT_SQL);
            pstmt.setString(1, obj.getUtente());
            pstmt.setString(2, obj.getCorso_nome());
            pstmt.setInt(3, obj.getPiano_id());
            pstmt.setInt(4, obj.getAnno());
            pstmt.setInt(5, obj.getSemestre());
            pstmt.executeUpdate();
            pstmt.close();
            con.close();
        } catch (SQLException ex) {
            throw new EccezioneCRUD(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex.getCause());
        }
    }

    @Override
    public void eliminaDatisuDb(TipoLinkcomposto_da obj, Utente u) throws EccezioneCRUD
    {
        try {
            Connection con = null;
            PreparedStatement pstmt = null;
            con = ConnectionManager.getConnection();
            pstmt = con.prepareStatement(DELETE_SQL);
            pstmt.setString(1, u.getLogin());
            pstmt.setString(2, obj.getCorso_nome());
            pstmt.setInt(3, obj.getPiano_id());
            pstmt.executeUpdate();
            pstmt.close();
            con.close(); //si assume la modalita’ autocommit
        } catch (SQLException ex) {
            throw new EccezioneCRUD(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex.getCause());
        }
    }

    @Override
    public TipoLinkcomposto_da leggiDatidaDb(TipoLinkcomposto_da obj, Utente u) throws EccezioneCRUD
    {
        try {
            Connection con = null;
            PreparedStatement pstmt = null;
            con = ConnectionManager.getConnection();
            pstmt = con.prepareStatement(SELECT_SQL);
            pstmt.setString(1, u.getLogin());
            pstmt.setString(2, obj.getCorso_nome());
            pstmt.setInt(3, obj.getPiano_id());
            ResultSet rs = pstmt.executeQuery();
            if(rs.next()){
                obj.setAnno(rs.getInt("anno"));
                obj.setSemestre(rs.getInt("semestre"));
            }
            pstmt.close();
            con.close(); //si assume la modalita’ autocommit
        } catch (SQLException ex) {
            throw new EccezioneCRUD(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex.getCause());
        }
        return obj;
    }

    @Override
    public void aggiornaDatisuDB(TipoLinkcomposto_da obj) throws EccezioneCRUD
    {
        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            con = ConnectionManager.getConnection();
            pstmt = con.prepareStatement(UPDATE_SQL);
            pstmt.setString(3, obj.getUtente());
            pstmt.setString(4, obj.getCorso_nome());
            pstmt.setInt(5, obj.getPiano_id());
            pstmt.setInt(1, obj.getAnno());
            pstmt.setInt(2, obj.getSemestre());
            pstmt.executeUpdate();
            pstmt.close();
            con.close();
        } catch (SQLException ex) {
            throw new EccezioneCRUD(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex.getCause());
        }
    }
}
